Software is hosted or running on most electronic devices and includes one or more files in the form of human-readable American Standard Code for Information Interchange (“ASCII”) plain text files or binary code. The hosted software, which runs on a processor or central processing unit (“CPU”), provides functionality in a host device but often changes over time. The software changes may result from the need to correct bugs, or errors, in the software files, adapt to evolving technologies, or add new features and functions. In particular, embedded software components hosted on mobile wireless devices often include numerous software bugs that require correction.
The software or programs of a device include software files divided into smaller units that are often referred to as modules or components. In mobile wireless devices, a real-time operating system (“RTOS”) is typically used in which the hosted software modules or components of the device are linked as a single large file. This large software file is loaded, or embedded, into the device, and is typically stored in the read-only-memory (“ROM”) or flash ROM of the wireless device.
The hosted software files of a wireless device can be updated to correct errors or add new functions using a wireless communication link or over-the-air (“OTA”) link like a radio link. Because of bandwidth, memory and other constraints relating to the wireless device, updating the hosted software after the device has been commercially released requires special proprietary applications. An example of these proprietary applications includes the upgrade or update applications referred to as DeltaUpdate™ and DeltaRewrite™ available from InnoPath Software, Inc. of Alviso, Calif. These upgrade applications are also the subject of the Related Applications.
Programs for the wireless devices are typically stored in device memory using a method referred to as static addressing. After a program has been written, it is compiled into computer-readable code during which the different modules or components of code are linked. This results in what is known as an image or memory image, where an image is an executable set of instructions in machine language stored in the ROM of the host device. These programs are typically organized into a continuous stream of instructions, some of which have references to instructions in other parts of the host device ROM. Because of this sequential and interconnecting architecture, the location of specific machine code within the host device ROM is largely fixed, thus the terminology “static addressing”.
Upgrading one part of the code of a host device using files received via an OTA link, even if the change is small, involves rewriting a large part of the host device ROM in order to re-sequence and adjust the references in the code. This makes the typical updating process tedious, error-prone, and time-consuming. Consequently, there is a need for Dynamic Addressing for use in upgrading software applications hosted on wireless devices like cellular telephones and other mobile communication devices, personal digital assistants (“PDAs”), and personal computers.
In the drawings, the same reference numbers identify identical or substantially similar elements or acts. To easily identify the discussion of any particular element or act, the most significant digit or digits in a reference number refer to the Figure number in which that element is first introduced (e.g., element 126 is first introduced and discussed with respect to FIG. 1).